// app.ts
import { PromptTemplate } from "@langchain/core/prompts";
import { LLMChain } from "langchain/chains";
import { QwenLLM } from "./qwen-llm";
import * as dotenv from "dotenv";

// 加载环境变量
dotenv.config();

async function main() {
  try {
    // 从环境变量获取 API Key
    const QWEN_API_KEY = process.env.QWEN_API_KEY || "";
    
    if (!QWEN_API_KEY) {
      throw new Error("请在.env文件中设置QWEN_API_KEY环境变量");
    }

    // 初始化通义千问模型
    const qwen = new QwenLLM(QWEN_API_KEY, {
      model: "qwen-max", // 可选：qwen-turbo, qwen-plus, qwen-max
      temperature: 0.7,
      max_tokens: 512,
    });

    // // 创建提示模板
    // const template = "请回答以下问题：{question}";
    // const prompt = PromptTemplate.fromTemplate(template);

    // // 构建链
    // const chain = new LLMChain({ llm: qwen, prompt });

    // // 调用
    // console.log("正在向通义千问发送请求...");
    // const res = await chain.call({
    //   question: "如何学习langchainjs",
    // });

    // console.log("\n回答：", res.text);

    // 2. 定义提示词模板
//   const prompt = PromptTemplate.fromTemplate(
//     "给一家位于{city}的{style}风格咖啡馆起5个有趣的名字"
//   );

//   // 3. 格式化输入
//   const formattedPrompt = await prompt.format({
//     city: "杭州",
//     style: "文艺复古"
//   });
const template = `
请为{product}撰写一段{platform}平台的推广文案，要求：
- 风格：{tone}
- 字数：不超过{wordCount}字
- 包含关键词：{keywords}
`;

const prompt = PromptTemplate.fromTemplate(template);

// 运行时填充
const formattedPrompt = await prompt.format({
  product: "智能保温杯",
  platform: "小红书",
  tone: "活泼种草风",
  wordCount: 500,
  keywords: "温感提醒、APP同步、颜值超高"
});
  // 4. 调用模型
  const response = await qwen.invoke(formattedPrompt);

  // 5. 输出结果
  console.log(response);
  } catch (error) {
    console.error("发生错误：", error);
  }
}

main();